
package com.idealighter.game.games.fqzs.struct;

import com.idealighter.game.games.common.AbstractSeat;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 飞禽走兽座位 .
 * 
 * @date 2016年2月17日 上午11:55:37
 *
 */

@Data
@EqualsAndHashCode(callSuper = true)
public class SharkSeat extends AbstractSeat {

  // 所属桌子
  private final SharkTable table;
  // 下注(key:图标id,val:下注筹码)
  private final Map<Integer, Long> bets = new ConcurrentHashMap<Integer, Long>();
  // 上一句下注信息(key:图标id,val:下注筹码)
  private final Map<Integer, Long> preBets = new ConcurrentHashMap<Integer, Long>();
  // 结算筹码
  private long billChips = 0;

  // 做庄的次数
  private int bankerNum;
  // 坐庄成绩(进入桌子后的所有输赢)
  private long bankerScore;

  /**
   * 构造函数 .
   * 
   * @param order .
   * @param table .
   */
  public SharkSeat(int order, SharkTable table) {
    super(order);
    this.table = table;
  }

  /**
   * 合计所有图标押注 .
   * 
   * @return
   */
  public long totalBets() {
    long totalBets = 0;
    for (Long bet : bets.values()) {
      totalBets += bet;
    }

    return totalBets;
  }

  /**
   * 重置座位数据 .
   */
  public void reset() {
    this.totalChips = 0;
    this.bets.clear();
    this.billChips = 0;
    this.bankerNum = 0;
    this.bankerScore = 0;
  }

  /**
   * 重置每次的游戏数据数据 .
   */
  public void resetGameData() {
    this.bets.clear();
    this.billChips = 0;
  }

  /**
   * 保存上一盘下注信息.
   * 
   * @Title saveInPreBets.
   * @author houdongsheng
   * @date 2018年1月10日 下午7:47:04
   */
  public void saveInPreBets() {
    this.preBets.clear();
    this.preBets.putAll(this.bets);
  }

  /**
   * 清空上一盘下注.
   * 
   * @Title cleanPreBets.
   * @author houdongsheng
   * @date 2018年1月10日 下午7:47:27
   */
  public void cleanPreBets() {
    this.preBets.clear();
  }

  /**
   * 清空座位数据 .
   */
  public void clear() {
    reset();
    cleanPreBets();
    this.playerId = 0;
    this.playerName = null;
  }

  @SuppressWarnings("unchecked")
  @Override
  public SharkTable table() {
    return table;
  }

}
